/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia;

import Persistencia.daos.ArbitroDAO;
import Persistencia.daos.CampeonatoDAO;

import Persistencia.daos.EstadioDAO;
import Persistencia.daos.PartidaDAO;
import Persistencia.daos.Relatorio.RelatorioDAO;
import Persistencia.daos.TecnicoDAO;
import Persistencia.daos.TimeDAO;
import Persistencia.modelos.Arbitro;
import Persistencia.modelos.Campeonato;
import Persistencia.modelos.Estadio;
import Persistencia.modelos.Partida;
import Persistencia.modelos.Tecnico;
import Persistencia.modelos.Time;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author HP
 */
public class TESTE {
    
    public static void main(String[] args){                                                       
                limpabanco();
        //        testaArbitro();
        //        testaTecnico();
        //        testaTime();
        //        testaEstadio();
        //        testaCampeonato();
        //        testaPartida();
        /*Map<String, Integer> x = new RelatorioDAO().recuperaClassificacaoPorCampeonato();
        Set<String> keySet = x.keySet();
        for (String string : keySet) {
            System.out.print(string + ": ");
            System.out.print(x.get(string) + "\n");
        }*/
    }            

    public static void testaPartida(){
        System.out.println("testes de Partida ============== \n\n");
        PartidaDAO dao = new PartidaDAO();               
        
        Collection<Time> times = new TimeDAO().recuperaTodos();        
        Collection<Campeonato> campeonatos = new CampeonatoDAO().recuperaTodos();
        Collection<Estadio> estadios = new EstadioDAO().recuperaTodos();
        
        Partida t1 = new Partida();
        t1.setCampeonato(campeonatos.iterator().next());
        t1.setDataPartida(Calendar.getInstance().getTime());
        t1.setEstadio(estadios.iterator().next());
        t1.setFlagOcorreuPartida(true);
        t1.setEstadio(estadios.iterator().next());
        t1.setNroPartida(1);
        t1.setNroRodada(1);
        t1.setQtdTorcedores(30000);
        
        Time a1= null;
        Time a2=null;
        for (Time time : times) {
            if (a1==null)
                a1 = time;
            else 
                a2 = time;
        }
        t1.setTimeMandante(a1);
        t1.setTimeVisitante(a2);        
        dao.salva(t1);
        
        Partida t2 = new Partida();
        t2.setCampeonato(campeonatos.iterator().next());
        t2.setDataPartida(Calendar.getInstance().getTime());
        t2.setEstadio(estadios.iterator().next());
        t2.setFlagOcorreuPartida(true);
        t2.setEstadio(estadios.iterator().next());
        t2.setNroPartida(1);
        t2.setNroRodada(1);
        t2.setQtdTorcedores(30000);
       
        Time b1=null;
        Time b2=null;
        for (Time time : times) {
            if (b2==null)
                b2 = time;
            else 
                b1 = time;
        }
        t2.setTimeMandante(b1);
        t2.setTimeVisitante(b2);                
        dao.salva(t2);
        
        t2.setQtdTorcedores(50000);
        dao.atualiza(t2);
        
        t2 = dao.recupera(t2.getNroPartida());       
        if (t2 != null && t2.getQtdeTorcedores()==50000){
            System.out.println("atualizou e recuperou");
        }
        
        Collection<Integer> ids = new ArrayList<Integer>();
        ids.add(t1.getNroPartida());
        ids.add(t2.getNroPartida());
        Collection<Partida> c = dao.recuperaLista(ids);
        if (c.size() == 2){
            System.out.println("Recuperou lista");
        }
        
        c = dao.recuperaTodos();
        if (c.size() == 2){
            System.out.println("Recuperou todos");
        }               
        
        System.out.println("\n\n fim de Times ============== \n\n");
    }
    
    public static void testaEstadio(){
        System.out.println("testes de Estadio ============== \n\n");
        EstadioDAO dao = new EstadioDAO();  
        
        Time t1 = new TimeDAO().recuperaTodos().iterator().next();        
        Time t2 = new TimeDAO().recuperaTodos().iterator().next();
        
        Estadio e1 = new Estadio();
        e1.setNomeEstadio("Itaquerão"); 
        e1.setDataFundacaoEst(Calendar.getInstance().getTime());
        e1.setCapacidadePessoas(10008);
        e1.setEndereco("Rua 1");
        e1.setTime(t2);
        dao.salva(e1);
        
        Estadio e2 = new Estadio();
        e2.setNomeEstadio("Palestra"); 
        e2.setEndereco("rua 3");
        e2.setDataFundacaoEst(Calendar.getInstance().getTime());
        e2.setCapacidadePessoas(10008);
        e2.setTime(t1);
        dao.salva(e2);
        
        dao.atualiza(e2);
        
        e2 = dao.recupera(e2.getIdEstadio());       
        if (e2 != null && e2.getNomeEstadio().equals("Palestra") ){
            System.out.println("atualizou e recuperou");
        }
        
        Collection<Integer> ids = new ArrayList<Integer>();
        ids.add(e1.getIdEstadio());
        ids.add(e2.getIdEstadio());
        Collection<Estadio> c = dao.recuperaLista(ids);
        if (c.size() == 2){
            System.out.println("Recuperou lista");
        }
        
        c = dao.recuperaTodos();
        if (c.size() == 2){
            System.out.println("Recuperou todos");
        }               
        
        System.out.println("\n\n fim de Times ============== \n\n");
    }
    
     public static void testaCampeonato(){
        System.out.println("testes de Campeonato ============== \n\n");
        CampeonatoDAO dao = new CampeonatoDAO();
                     
        Campeonato t1 = new Campeonato();
        t1.setNomeCampeonato("brasileiro");
        t1.setQtdePartidas(38*20);
        t1.setDataInicio(Calendar.getInstance().getTime());
        t1.setDataFim(Calendar.getInstance().getTime());
        dao.salva(t1);
        
        Campeonato t2 = new Campeonato();
        t2.setNomeCampeonato("carioca");
        t2.setQtdePartidas(19*20);
        t2.setDataInicio(Calendar.getInstance().getTime());
        t2.setDataFim(Calendar.getInstance().getTime());
        dao.salva(t2);
        
        t2.setNomeCampeonato("São Paulo");
        dao.atualiza(t2);
        
        t2 = dao.recupera(t2.getIdCampeonato());       
        if (t2 != null && t2.getNomeCampeonato().equals("São Paulo") ){
            System.out.println("atualizou e recuperou");
        }
        
        Collection<Integer> ids = new ArrayList<Integer>();
        ids.add(t1.getIdCampeonato());
        ids.add(t2.getIdCampeonato());
        Collection<Campeonato> c = dao.recuperaLista(ids);
        if (c.size() == 2){
            System.out.println("Recuperou lista");
        }
        
        c = dao.recuperaTodos();
        if (c.size() == 2){
            System.out.println("Recuperou todos");
        }               
        
        System.out.println("\n\n fim de Times ============== \n\n");
    }
    
    public static void testaTime(){
        System.out.println("testes de Time ============== \n\n");
        TimeDAO dao = new TimeDAO();
        
        Tecnico tec = new TecnicoDAO().recuperaTodos().iterator().next();
        
        Time t1 = new Time();
        t1.setNomeTime("Palmeiras"); 
        t1.setDataFundacao(Calendar.getInstance().getTime());
        t1.setTecnico(tec);
        dao.salva(t1);
        
        Time t2 = new Time();
        t2.setNomeTime("Corinthians"); 
        t2.setDataFundacao(Calendar.getInstance().getTime());
        t2.setTecnico(tec);
        dao.salva(t2);
        
        t2.setNomeTime("São Paulo");
        dao.atualiza(t2);
        
        t2 = dao.recupera(t2.getIdTime());       
        if (t2 != null && t2.getNomeTime().equals("São Paulo") ){
            System.out.println("atualizou e recuperou");
        }
        
        Collection<Integer> ids = new ArrayList<Integer>();
        ids.add(t1.getIdTime());
        ids.add(t2.getIdTime());
        Collection<Time> c = dao.recuperaLista(ids);
        if (c.size() == 2){
            System.out.println("Recuperou lista");
        }
        
        c = dao.recuperaTodos();
        if (c.size() == 2){
            System.out.println("Recuperou todos");
        }               
        
        System.out.println("\n\n fim de Times ============== \n\n");
    }
    
    public static void testaTecnico(){
        System.out.println("testes de TECNICO ============== \n\n");
        TecnicoDAO dao = new TecnicoDAO();
        
        Tecnico t1 = new Tecnico();
        t1.setNomePessoa("Tiago");
        t1.setSalarioPessoa(10000);
        t1.setDataNascPessoa(Calendar.getInstance().getTime());
        t1.setDataAdmissao(Calendar.getInstance().getTime());        
        t1.setEstilo("ofensivo");
        dao.salva(t1);
        
        Tecnico t2 = new Tecnico();
        t2.setNomePessoa("Rodrigo");
        t2.setSalarioPessoa(10000);
        t2.setDataNascPessoa(Calendar.getInstance().getTime());
        t2.setDataAdmissao(Calendar.getInstance().getTime());        
        t2.setEstilo("ofensivo");
        dao.salva(t2);
        
        t2.setNomePessoa("Caxeiro");
        dao.atualiza(t2);
        
        t2 = dao.recupera(t2.getIdPessoa());       
        if (t2 != null && t2.getNomePessoa().equals("Caxeiro") ){
            System.out.println("atualizou e recuperou");
        }
        
        Collection<Integer> ids = new ArrayList<Integer>();
        ids.add(t1.getIdPessoa());
        ids.add(t2.getIdPessoa());
        Collection<Tecnico> c = dao.recuperaLista(ids);
        if (c.size() == 2){
            System.out.println("Recuperou lista");
        }
        
        c = dao.recuperaTodos();
        if (c.size() == 2){
            System.out.println("Recuperou todos");
        }               
        
        System.out.println("\n\n fim de TECNICO ============== \n\n");

    }
    
    public static void testaArbitro(){
        System.out.println("testes de ARBITRO ============== \n\n");
        ArbitroDAO dao = new ArbitroDAO();
        
        Arbitro a1 = new Arbitro();
        a1.setNomePessoa("Tiago");
        a1.setSalarioPessoa(10000);
        a1.setDataNascPessoa(Calendar.getInstance().getTime());
        a1.setDataAdmissao(Calendar.getInstance().getTime());        
        a1.setTipoArbitro("bandeira");
        dao.salva(a1);
        
        Arbitro a2 = new Arbitro();
        a2.setNomePessoa("Rodrigo");
        a2.setSalarioPessoa(10000);
        a2.setDataNascPessoa(Calendar.getInstance().getTime());
        a2.setDataAdmissao(Calendar.getInstance().getTime());        
        a2.setTipoArbitro("bandeira");
        dao.salva(a2);              
        
        a2.setNomePessoa("Caxeiro");
        dao.atualiza(a2);
        
        a2 = dao.recupera(a2.getIdPessoa());       
        if (a2 != null && a2.getNomePessoa().equals("Caxeiro") ){
            System.out.println("atualizou e recuperou");
        }
        
        Collection<Integer> ids = new ArrayList<Integer>();
        ids.add(a1.getIdPessoa());
        ids.add(a2.getIdPessoa());
        Collection<Arbitro> c = dao.recuperaLista(ids);
        if (c.size() == 2){
            System.out.println("Recuperou lista");
        }
        
        c = dao.recuperaTodos();
        if (c.size() == 2){
            System.out.println("Recuperou todos");
        }       
        
        System.out.println("\n\n fim de ARBITRO ============== \n\n");
    }
    
    public static void limpabanco(){        
        try {
            Connection con = ConnectionFactory.getConnection();
            Statement st = con.createStatement();                     
            st.execute("delete from gols");  
            st.execute("delete from partida");                
            st.execute("delete from estadio");            
            st.execute("delete from jogador");  
            st.execute("delete from time");            
            st.execute("delete from arbitro");            
            st.execute("delete from tecnico");              
                                                                                                           
            st.close();
            con.close();
        } catch (SQLException ex) {
            Logger.getLogger(TESTE.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
